# 接口、协议、抽象基类
class MyDict(dict):#实现dict和dict的相加；字典直接相加；
    def __iadd__(self, other):#协议、接口；__开头的方法；重写dict的加法；
        self.update(other)
        return self

    def __str__(self):#__str接口；改变了print函数的打印输出方式
        return f"My Dict {self.items()}"

a=MyDict(a=1,b=2)#自定义声明dict
b=MyDict(c=3,d=4)
print(a)
print(b)

a+=b#字典直接相加
print(a)

#以下输出，实现了字典的直接相加，实现了自定义的输出格式
# My Dict dict_items([('a', 1), ('b', 2)])
# My Dict dict_items([('c', 3), ('d', 4)])
# My Dict dict_items([('a', 1), ('b', 2), ('c', 3), ('d', 4)])


# class GoGamer:  #
#     def go(self): #围棋手必会下围棋;作为一个什么身份，特定必须要会什么；就得实现什么接口；
#         pass
#
# class ChineseGoGamer(GoGamer):
#     nation='cn'
#
# class KoreaGoGamer(GoGamer):
#     nation='kr'


#围棋运动员、游泳运动员，都有注册、排名需要，围棋运动员继承游泳运动员？不科学；
#他两有共同需要的方法，那就抽象基类；
import abc
class Mixin:#实现类
    def sign(self):#注册
        pass

    def rank(self):#排名
        pass

class Gamer:#抽象基类   运动员
    @abc.abstractmethod   #抽象基类
    def sign(self):
        pass


class GoGamer(Mixin, Gamer):#继承实现类、抽象基类运动员类
    pass

class Swimmer(Mixin, Gamer):#继承实现类、抽象基类运动员类
    pass


class Swimmer:#游泳运动员需要 注册、体检、排名
    def sign(self):
        pass
    def tijian(self):
        pass
    def rank(self):
        pass
class Gogamer:#围棋选手也需要 注册、体检、排名
    def sign(self):
        pass
    def tijian(self):
        pass
    def rank(self):
        pass

#游泳运动员和围棋选手都需要 注册、体检、排名；
# 围棋选手继承游泳运动员？继承？不合理；
class GoGamer(Swimmer):
    pass
